C++ এর স্ট্যান্ডার্ড লাইব্রেরি বিভিন্ন Associative Containers সরবরাহ করে যা ডেটাকে একটি নির্দিষ্ট অর্ডারে বা নির্দিষ্ট কীগুলির সাথে যুক্ত করে সংরক্ষণ করে। এই কনটেইনারগুলোতে ডেটা অনুসন্ধান এবং সংশোধন দ্রুত হয় কারণ এগুলো সাধারণত সঞ্চিত ডেটাকে স্বয়ংক্রিয়ভাবে সাজানো রাখে (সাধারণত একটি বৈদ্যুতিন সার্চ ট্রি বা লাল-কালো ট্রি দ্বারা)।
নিচে C++ এর কিছু সাধারণ Associative Containers: std::set
, std::map
, std::multiset
, এবং std::multimap
এর ব্যবহার এবং পার্থক্য আলোচনা করা হয়েছে:
std::set
std::set
একটি কনটেইনার যা ইউনিক (অদ্বিতীয়) উপাদানসমূহ সংরক্ষণ করে এবং এগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে। এটি সিএট (Tree) ডেটা স্ট্রাকচার ব্যবহার করে, তাই ডেটা খুব দ্রুত খুঁজে পাওয়া যায় এবং সন্নিবেশ করা যায়।
#include <iostream>
#include <set>
int main() {
std::set<int> numbers;
// সেটে উপাদান যোগ করা
numbers.insert(5);
numbers.insert(2);
numbers.insert(8);
numbers.insert(3);
numbers.insert(5); // ডুপ্লিকেট, তাই যোগ হবে না
// সেটের উপাদান প্রিন্ট করা
for (int num : numbers) {
std::cout << num << " ";
}
return 0;
}
আউটপুট:
2 3 5 8
এখানে, 5
ডুপ্লিকেট হওয়ায় সেটে একবারই থাকবে, এবং উপাদানগুলো সাজানো অবস্থায় থাকবে।
std::map
std::map
একটি অ্যাসোসিয়েটিভ কনটেইনার যা কী-ভ্যালু জোড়া সংরক্ষণ করে। এখানে প্রতিটি কী অবশ্যই ইউনিক হতে হবে, এবং কী-এর উপর ভিত্তি করে মান (ভ্যালু) সংরক্ষিত হয়। এটি সাধারণত সাজানো থাকে এবং দ্রুত অনুসন্ধান (log(n) সময়) সমর্থন করে।
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> ages;
// মান যোগ করা
ages["John"] = 25;
ages["Alice"] = 30;
ages["Bob"] = 22;
// মান অ্যাক্সেস করা
std::cout << "Alice's age: " << ages["Alice"] << std::endl;
// কী-ভ্যালু জোড়া প্রিন্ট করা
for (const auto& pair : ages) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
আউটপুট:
Alice's age: 30
Alice: 30
Bob: 22
John: 25
এখানে, std::map
কীগুলোর উপর ভিত্তি করে সাজানো হয়েছে এবং প্রতিটি কী একটি মানের সাথে সংযুক্ত।
std::multiset
std::multiset
হল একটি অ্যাসোসিয়েটিভ কনটেইনার যা অদ্বিতীয় নয় এমন উপাদান সংরক্ষণ করতে দেয়। এটি ডুপ্লিকেট মান অনুমোদন করে এবং উপাদানগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে। std::set
এর মতোই, তবে এতে ডুপ্লিকেট উপাদান থাকতে পারে।
#include <iostream>
#include <set>
int main() {
std::multiset<int> numbers;
// সেটে উপাদান যোগ করা
numbers.insert(5);
numbers.insert(2);
numbers.insert(5);
numbers.insert(8);
numbers.insert(3);
// সেটের উপাদান প্রিন্ট করা
for (int num : numbers) {
std::cout << num << " ";
}
return 0;
}
আউটপুট:
2 3 5 5 8
এখানে, 5
দুটি বার ইনসার্ট হওয়ার পরেও সেটে দুইবার উপস্থিত রয়েছে, কারণ std::multiset
ডুপ্লিকেট মান গ্রহণ করে।
std::multimap
std::multimap
হল একটি অ্যাসোসিয়েটিভ কনটেইনার যা কী-ভ্যালু জোড়া সংরক্ষণ করে, এবং এটি ডুপ্লিকেট কী অনুমোদন করে। এটি মূলত std::map
এর মতো, তবে এতে একই কী এর জন্য একাধিক মান থাকতে পারে।
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> grades;
// মান যোগ করা
grades.insert({"John", 85});
grades.insert({"Alice", 90});
grades.insert({"John", 88});
grades.insert({"Bob", 92});
grades.insert({"Alice", 95});
// কী-ভ্যালু জোড়া প্রিন্ট করা
for (const auto& pair : grades) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
আউটপুট:
Alice: 90
Alice: 95
Bob: 92
John: 85
John: 88
এখানে, John
এবং Alice
এর জন্য একাধিক গ্রেড রয়েছে, কারণ std::multimap
ডুপ্লিকেট কী অনুমোদন করে।
Container | Key | Duplicates | Order |
---|---|---|---|
std::set | Single | No | Sorted (ascending by default) |
std::map | Single | No | Sorted by key |
std::multiset | Single | Yes | Sorted (ascending by default) |
std::multimap | Single | Yes | Sorted by key |
std::set
: ইউনিক উপাদান সংরক্ষণ করে এবং উপাদানগুলো সাজানো থাকে।std::map
: ইউনিক কী-ভ্যালু জোড়া সংরক্ষণ করে, এবং কীগুলোর উপর ভিত্তি করে সাজানো থাকে।std::multiset
: ডুপ্লিকেট উপাদান অনুমোদন করে এবং উপাদানগুলো সাজানো থাকে।std::multimap
: ডুপ্লিকেট কী অনুমোদন করে এবং কীগুলোর উপর ভিত্তি করে সাজানো থাকে।এই কনটেইনারগুলো বিভিন্ন ক্ষেত্রে ব্যবহার করা যায় যেখানে ডেটা সঞ্চয় ও অনুসন্ধানের প্রয়োজন এবং ডেটাকে সাজানো রাখতে হবে।
Read more